Aula 31 - Mapas

Módulo 3: Apresentando suas análises

Carolina Musso

PROFESP, DEMSP, MS

Esta semana

Aula 31 - Mapas

  • O que é GIS, como usar ggplot para Mapas …

Aula 32 - Meu primeiro Mapa

  • Mapa do Brasil usando shapefiles salvos no computador..

Aula 33 - Mapas Iterativos

  • Um gostinho de mapas iterativos para dashboards

Leituras para aprofundamento

Termos importantes

  • Geographic Information System (GIS)

    • Gis e ArcGis
  • Vetor: Pontos, linhas e polígonos

  • Raster: Pixels

Como essas informações estão armazenadas?

  • Geralmente em Shapefiles

    • coleção de arquivos: .shp, .shx, and .dbf. ou mais…

    • Localização na superfície da terra

    • Sistema de coordenadas

Como importar isso para o R?

  • Pacotes, baixam direto os shapefiles

    • brazilmaps, geobr, naturalearth…
  • Ler de shapefiles no disco (seu computurador)

Atenção!

  • Não é um dataframe

  • Mas não importa, vamos fingir que é

Resumidamente

  1. Importar duas bases (seus dados e shapefiles)
  2. Fazer o join
  3. Fazer um mapa como se fosse um ggplot

Iniciando

Pacotes

rm(list=ls())  #limpa  o ambient
if (!require(pacman)) install.packages("pacman") #garante que tem o pacman
pacman::p_load(tidyverse, rio, sf, rnaturalearth, geobr, 
               lubridate, ggspatial, ggthemes, gsubfn) 

pacman::p_install_gh("yutannihilation/ggsflabel")

Bases

# BANCOS DE CASOS----

#MUNDO
#banco bruto da OMS, como é baixado da internet, Casos Covid
who_bruto <- import("https://covid19.who.int/WHO-COVID-19-global-data.csv")


# SHAPEFILES ----

#MUNDO
mundo <- ne_countries(scale = "medium", returnclass = "sf") 

Preparando as bases

# MANIPULAÇÕES NO BANCO -----------

# OMS
who_trat <- who_bruto %>% 
  dplyr::select(WHO_region,Date_reported,Country,New_cases,Cumulative_cases, New_deaths)%>% 
  dplyr::group_by(WHO_region, Country) %>% # agrupando  (tabela dinamica)
  dplyr::summarise(Acumulado=max(Cumulative_cases, na.rm=T)) 

# Shape
mundo_trat <- mundo %>% 
  dplyr::rename(Country=admin) # PARA PODER FAZER O JOIN

Join

covid_mundo_com_shape <- left_join(who_trat,  mundo_trat)
  • Vamos plotar?

Mas antes!

Vamos dar olhada num papa genérico.

ggplot(mundo)+
  geom_sf(aes(geometry=geometry))

  • Duas linhas!

Com nossos dados

ggplot(covid_mundo_com_shape,aes(geometry=geometry))+
  geom_sf(aes(fill=Acumulado ))+
  scale_fill_distiller(direction=1)+
  theme_map()

Uma melhoradinha nos números

eixo = function(x) format(x, big.mark = ".",
                          decimal.mark = ",",
                          scientific = FALSE)

ggplot(covid_mundo_com_shape,aes(geometry=geometry))+
  geom_sf(aes(fill=Acumulado ))+
  scale_fill_distiller(direction=1, label=eixo)+
  theme_map()

Notaram um probleminha?

  • Mundo:

    • Trabalhar códigos ISO
    • Ter um dicionário (e fazer um join)
mundo_iso <- mundo_trat %>% 
  dplyr::rename(iso=iso_a2)

who_acumulado_iso <- who_bruto %>% 
  dplyr::group_by(Country_code) %>% #iso
  dplyr::summarise(Acumulado=max(Cumulative_cases, na.rm=T)) %>% 
  rename(iso=Country_code)

covid_mundo_com_shape_iso <- left_join(who_acumulado_iso, mundo_iso)

Firulas

covid_mundo_com_shape_iso2<- covid_mundo_com_shape_iso %>% 
  mutate(Acumulado_cat=cut(Acumulado,
                           breaks=c(-1,17000,160000,1000000,
                                    max(covid_mundo_com_shape_iso$Acumulado, na.rm=T)+1),
                           labels=c("até 17 mil", "17 mil - 160 mil ", 
                                    "160 mil - 1 milhão", "acima de 1 milhão")))


paleta<-c('#feebe2','#fbb4b9','#f768a1','#ae017e')
ggplot(covid_mundo_com_shape_iso2, fill="white")+
  geom_sf(aes(geometry=geometry, fill=Acumulado_cat ), 
          color="purple", # cor da fronteira
              lwd=0.1) + # finura da fronteira
  scale_fill_manual(values=paleta, name="Casos Acumulados \n de covid-19  no Mundo")+
  theme_map()+
 theme(panel.background = element_rect(fill = "lightblue"),
       legend.position = "bottom")+
  ggtitle("Um mapa bonito")#oceano

ggsave("mapa_rosa.png")

Obrigada!